package study;

import org.w3c.dom.ls.LSOutput;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

/**
 * @version 1.0
 * @since:
 * @ClassName:CollectionTest
 * @author: Li Jiahui
 * @date: 2021-04-20 17:27
 */
public class CollectionTest {

    public static void main(String[] args) {
        //1.准备一个Collection集合并打印，用Collection接口声明一个类，形成多态；
        Collection c1 = new ArrayList();
        //自动调用toString方法，调用ArrayList类中的toString方法，这里可以查看一下javaapi文档，
        // 但我们在文件中没有找到ArrayList有toString方法，那么就找ArrayList的父类AbstractArrayList，
        // 但也没有找到；在到AbstractArrayList的父类（AbstractCollection)里找toString方法。
        // 看一下这个说明，返回集合的字符串表示形式。字符串表示由一个集合元素的列表组成，用方括号[]括起来，默认为[元素值1, 元素值2, ...]
        System.out.println(c1);
        boolean b1 = c1.add(new String("taobao"));
        System.out.println(c1);
        b1 =c1.add(Integer.valueOf(2));
        System.out.println(c1);
        //打印集合中的所有元素时，本质上就是打印集合中的每个对象，也就是让每个对象调用对应类的toString方法
        c1.add(new Person("zhangfei",30));
        System.out.println(c1);
        System.out.println("-----------");
        //添加多个元素
        Collection c2 = new ArrayList();
        c2.add("three");
        c1.addAll(c2);
        System.out.println(c1);
        c1.add(c2);
        System.out.println(c1);
        //判断集合中是否包含参数指定的单个元素
        b1 = c1.contains("one");
        System.out.println(b1);
        b1 = c1.contains(new String ("three"));
        System.out.println(b1);
        //当Person类中没有重写equals方法时，则调用从Object类中继承下来的equals方法，比较两个对象的地址 true
        //当Person类中重写equals方法后，则调用重写以后的版本，比较两个对象的内容 true
        b1 = c1.contains(new Person("zhangfei",30));
        System.out.println(b1);
        System.out.println("--------------");
        System.out.println(c1);
        Collection c3 = new ArrayList();
        c3.add(4);
        System.out.println(c3);
        b1 = c1.containsAll(c3);
        System.out.println(b1);
        c3.add("three");
        b1 = c1.containsAll(c3);
        System.out.println(b1);
        System.out.println(c2);//[three, 4]
        b1 = c1.contains(c2);
        System.out.println(b1);
        b1 = c1.containsAll(c2);
        System.out.println(b1);
        System.out.println("c2 =" + c2);
        System.out.println("c3 =" + c3);
        b1 = c2.retainAll(c2);
        System.out.println(b1);
        System.out.println(c2);
        b1 = c2.retainAll(c3);//计算集合c2和c3的交集并保留到集合c2中，取代集合c2中原有的数值
        System.out.println(b1);
        System.out.println(c2);
        System.out.println(c3);
        c3.remove(4);
        System.out.println(c3);
        c3.clear();
        System.out.println(c3);
        System.out.println(c1);
        c1.remove(new Person("zhangfei",30));
        System.out.println(c1);
        c1.removeAll(c3);
        System.out.println(c1);
        System.out.println(c1.size());
        System.out.println(c3.equals(c3));
        System.out.println(c1.isEmpty());
        Object[] ob1 = c1.toArray();
        System.out.println(Arrays.toString(ob1));
    }
}
